iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0
Kubernetes

K8s 資料庫管理系統系列 第 3

day3 K8s豬隻管理系統

  • 分享至 

  • xImage
  •  

今天是第三天我們可以寫一個利用k8去做自動化豬隻管理系統,以下是程式碼

系統架構概述

  1. 資料收集服務 (Data Collection Service): 用於從各種感測器收集豬隻的資料,例如溫度、活動量等。
  2. 資料分析服務 (Data Analysis Service): 分析收集到的資料,檢測是否有異常或需要注意的情況。
  3. 通知服務 (Notification Service): 當分析服務發現問題時,向管理者發送通知。

Kubernetes 資源配置範例

1. 建立Namespace

首先,我們可以在Kubernetes集群中為這個系統建立一個專門的命名空間:

apiVersion: v1
kind: Namespace
metadata:
  name: pig-management-system

2. 資料收集服務

這個服務可以是一個簡單的Python應用程式,持續從感測器收集資料並將其儲存在資料庫中。我們可以使用Deployment來部署這個服務:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: data-collection-service
  namespace: pig-management-system
spec:
  replicas: 3
  selector:
    matchLabels:
      app: data-collection
  template:
    metadata:
      labels:
        app: data-collection
    spec:
      containers:
      - name: data-collector
        image: your-docker-registry/data-collector:latest
        ports:
        - containerPort: 8080
        env:
        - name: SENSOR_ENDPOINT
          value: "http://sensor-api.local"

3. 資料分析服務

這個服務分析從資料收集服務儲存的資料,可以透過一個Job來執行資料分析工作,例如每天定時執行一次:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: data-analysis-job
  namespace: pig-management-system
spec:
  schedule: "0 2 * * *"  # 每天凌晨2點執行
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: data-analyzer
            image: your-docker-registry/data-analyzer:latest
          restartPolicy: OnFailure

4. 通知服務

這個服務可以監控資料分析的結果,並根據需要向管理者發送通知。可以使用一個簡單的Deployment來管理這個服務:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: notification-service
  namespace: pig-management-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: notification
  template:
    metadata:
      labels:
        app: notification
    spec:
      containers:
      - name: notifier
        image: your-docker-registry/notifier:latest
        ports:
        - containerPort: 8080
        env:
        - name: ANALYSIS_RESULT_ENDPOINT
          value: "http://data-analysis-service.local/results"

5. 使用Service暴露服務

為了讓這些服務可以互相通信,我們可以使用Service來暴露它們:

apiVersion: v1
kind: Service
metadata:
  name: data-collection-service
  namespace: pig-management-system
spec:
  selector:
    app: data-collection
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: notification-service
  namespace: pig-management-system
spec:
  selector:
    app: notification
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

1. 建立Namespace

apiVersion: v1
kind: Namespace
metadata:
  name: pig-management-system

Namespace是Kubernetes中用來將資源隔離和組織的一種方式。在這裡,我們建立了一個名為pig-management-system的命名空間,用來隔離和管理與豬隻管理系統相關的所有資源。這樣可以避免不同應用的資源相互干擾,並且便於後續的資源清理和管理。

2. 資料收集服務 (Data Collection Service)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: data-collection-service
  namespace: pig-management-system
spec:
  replicas: 3
  selector:
    matchLabels:
      app: data-collection
  template:
    metadata:
      labels:
        app: data-collection
    spec:
      containers:
      - name: data-collector
        image: your-docker-registry/data-collector:latest
        ports:
        - containerPort: 8080
        env:
        - name: SENSOR_ENDPOINT
          value: "http://sensor-api.local"

Deployment是Kubernetes中用來管理應用程序的部署和擴展的一個資源對象。這裡我們定義了一個data-collection-service的Deployment,主要功能是收集豬隻的各種感測器數據。這個Deployment有以下幾個重要部分:

  • replicas: 定義了應用程序的副本數。這裡設置為3,表示會有三個data-collector容器實例在Kubernetes集群中運行。這樣可以確保高可用性和負載均衡。

  • selector: 定義了如何選擇這個Deployment管理的Pods。這裡使用matchLabels來選擇所有帶有app: data-collection標籤的Pods。

  • template: 定義了Pod的模板,包括容器的配置。這裡我們定義了一個名為data-collector的容器,使用了一個自定義的Docker映像your-docker-registry/data-collector:latest。這個映像可能是一個用Python或其他語言編寫的應用程序,專門用來從感測器收集數據。

  • env: 用來定義環境變量。這裡我們設置了一個名為SENSOR_ENDPOINT的環境變量,這可能是應用程序用來訪問感測器API的地址。

3. 資料分析服務 (Data Analysis Service)

apiVersion: batch/v1
kind: CronJob
metadata:
  name: data-analysis-job
  namespace: pig-management-system
spec:
  schedule: "0 2 * * *"  # 每天凌晨2點執行
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: data-analyzer
            image: your-docker-registry/data-analyzer:latest
          restartPolicy: OnFailure

CronJob用於定期執行一些計劃任務,例如每天定期分析豬隻的數據。這裡的data-analysis-job是一個每天凌晨2點執行的任務。其重要部分如下:

  • schedule: 定義了CronJob的執行時間。這裡的配置表示每天的凌晨2點執行一次。

  • jobTemplate: 定義了Job的模板,包含Pod的配置。這裡我們定義了一個data-analyzer的容器,使用your-docker-registry/data-analyzer:latest映像。這個容器負責分析收集到的數據。

  • restartPolicy: 設定Pod失敗後的重啟策略。OnFailure表示如果Pod因某些原因失敗,Kubernetes將會重新啟動該Pod,確保任務最終完成。

4. 通知服務 (Notification Service)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: notification-service
  namespace: pig-management-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: notification
  template:
    metadata:
      labels:
        app: notification
    spec:
      containers:
      - name: notifier
        image: your-docker-registry/notifier:latest
        ports:
        - containerPort: 8080
        env:
        - name: ANALYSIS_RESULT_ENDPOINT
          value: "http://data-analysis-service.local/results"

這部分配置是用來處理豬隻數據分析後的通知功能。當資料分析服務發現異常數據時,這個通知服務會向管理者發送通知。

  • replicas: 這裡設置為1,表示只運行一個通知服務的實例,因為一般來說這種通知功能不需要多個副本。

  • env: 我們定義了一個環境變量ANALYSIS_RESULT_ENDPOINT,用來指向分析結果的API,這樣通知服務就可以獲取分析結果並決定是否需要發送通知。

5. 使用Service暴露服務

apiVersion: v1
kind: Service
metadata:
  name: data-collection-service
  namespace: pig-management-system
spec:
  selector:
    app: data-collection
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: notification-service
  namespace: pig-management-system
spec:
  selector:
    app: notification
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

Service是Kubernetes用來暴露Pod的網絡服務。它可以讓不同的服務在集群內部或外部相互通信,甚至可以通過負載均衡來分配流量。

  • selector: 定義這個Service選擇哪些Pod來處理進來的流量。這裡使用app標籤來選擇對應的Pods。

  • ports: 定義Service暴露的端口,以及映射到Pod的哪個端口。這裡,port是Service的端口,而targetPort是Pod中的應用程序在運行的端口。

總結

這個Kubernetes配置展示了一個基本的自動化管理豬隻系統,涵蓋了數據的收集、分析和通知功能。Kubernetes中的各種資源(如Namespace、Deployment、CronJob、Service)被用來管理和協調這些功能,從而達到自動化管理的目標。


上一篇
day2 從企業實例看k8s導入
下一篇
day 4 K8s 資料庫模仿google存取資料系統
系列文
K8s 資料庫管理系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言